package com.xnyzc.lhy.common.util.jt;

import com.alibaba.fastjson.JSONObject;

/**
 * Author    Snaky丶
 * Time      2018/3/22 15:31
 * Function  格式化json字符串
 */

public class JsonFormatUtils {

    private static String getLevelStr(int level) {
        StringBuffer levelStr = new StringBuffer();

        for (int levelI = 0; levelI < level; levelI++) {
            levelStr.append("\t");
        }
        return levelStr.toString();
    }

    public static String formatJson(String data){
        int level = 0;
        //存放格式化的json字符串
        StringBuffer jsonForMatStr = new StringBuffer();
        //将字符串中的字符逐个按行输出
        //data = data.replaceAll(" ","");
        for(int index=0;index < data.length();index++){
            //获取s中的每个字符
            char c = data.charAt(index);

            //level大于0并且jsonForMatStr中的最后一个字符为\n,jsonForMatStr加入\t
            if (level > 0 && '\n' == jsonForMatStr.charAt(jsonForMatStr.length() - 1)) {
                jsonForMatStr.append(getLevelStr(level));
            }
            //遇到"{"和"["要增加空格和换行，遇到"}"和"]"要减少空格，以对应，遇到","要换行
            switch (c) {
                case '{':
                case '[':
                    jsonForMatStr.append(c).append("\n");
                    level++;
                    break;
                case ',':
                    jsonForMatStr.append(c);
                    if(data.charAt(index + 1) == '"' || data.charAt(index + 1) == '\\'){
                        jsonForMatStr.append("\n");
                    }
                    break;
                case '}':
                case ']':
                    jsonForMatStr.append("\n");
                    level--;
                    jsonForMatStr.append(getLevelStr(level));
                    jsonForMatStr.append(c);
                    break;
                default:
                    jsonForMatStr.append(c);
                    break;
            }
        }
        return jsonForMatStr.toString();
    }
    
    
    public static void main(String[] args) {
        JSONObject json = new JSONObject();
        json.put("aa","12,23");
        System.out.println(JsonFormatUtils.formatJson(json.toString()));
    }
}
